home *** CD-ROM | disk | FTP | other *** search
/ NeXT Enterprise Objects Framework 1.1 / NeXT Enterprise Objects Framework 1.1.iso / NextDeveloper / Examples / EnterpriseObjects / SHLExamples / Delegation / AppController.m < prev    next >
Encoding:
Text File  |  1994-09-29  |  5.8 KB  |  273 lines

  1. /*--------------------------------------------------------------------------
  2.  *
  3.  *     You may freely copy, distribute, and reuse the code in this example.
  4.  *     SHL Systemhouse disclaims any warranty of any kind, expressed or  
  5.  *    implied, as to its fitness for any particular use.
  6.  *
  7.  *
  8.  *    AppController
  9.  *
  10.  *    Inherits From:        NSObject
  11.  *
  12.  *    Conforms To:        None
  13.  *
  14.  *    Declared In:        AppController.h
  15.  *
  16.  *
  17.  *------------------------------------------------------------------------*/
  18. #import <eointerface/eointerface.h>
  19.  
  20. #import "AppController.h"
  21. #import "ScrollViewExtensions.h"
  22.  
  23.  
  24. typedef enum {
  25.     EOCONTROLLER, EODATABASE, EODATABASECONTEXT, EODATABASECHANNEL,
  26.     EOADAPTOR, EOADAPTORCONTEXT, EOADAPTORCHANNEL
  27. } EOFDelegates;
  28.  
  29.  
  30.  
  31.  
  32. @implementation AppController
  33.  
  34. /*--------------------------------------------------------------------------
  35.  *    Tracing
  36.  *------------------------------------------------------------------------*/
  37. - (BOOL) isTracing
  38. {
  39.     return trace;
  40. }
  41.  
  42.  
  43. - (BOOL) isVerbose
  44. {
  45.     return verbose;
  46. }
  47.  
  48.  
  49. - (BOOL) wantsAlertPanels
  50. {
  51.     return alert;
  52. }
  53.  
  54.  
  55. - setTracingOFF: sender
  56. {
  57.     trace = ( ! [[sender selectedCell] state]);
  58.     return self;
  59. }
  60.  
  61.  
  62. - setIsVerbose: sender
  63. {
  64.     verbose = [[sender selectedCell] state];
  65.     return self;
  66. }
  67.  
  68.  
  69. - setWantsAlertPanels: sender
  70. {
  71.     alert = [[sender selectedCell] state];
  72.     return self;
  73. }
  74.  
  75.  
  76. - console:sender
  77. {
  78.     id    window = [console window];
  79.     
  80.     [window isVisible] ? [window orderOut:nil] : [window orderFront:nil];
  81.     return self;
  82. }
  83.  
  84.  
  85. /*--------------------------------------------------------------------------
  86.  *    Setting Delegates
  87.  *------------------------------------------------------------------------*/
  88. - _eofObjectForTag:(int)tag
  89. {
  90.     id    eofObject;
  91.     
  92.     switch (tag)
  93.         {
  94.         case EOCONTROLLER:
  95.             eofObject = eoController;
  96.             break;
  97.             
  98.         case EODATABASECHANNEL:    
  99.             eofObject =  [(EODatabaseDataSource *) [eoController dataSource] databaseChannel]; 
  100.             break;
  101.  
  102.         case EOADAPTOR:    
  103.             eofObject = [[[[(EODatabaseDataSource *)[eoController dataSource] databaseChannel] 
  104.                 adaptorChannel] adaptorContext] adaptor];
  105.             break;
  106.  
  107.         case EOADAPTORCONTEXT:    
  108.             eofObject = [[[(EODatabaseDataSource *)[eoController dataSource] databaseChannel] 
  109.                 adaptorChannel] adaptorContext];
  110.             break;
  111.  
  112.         case EOADAPTORCHANNEL:    
  113.             eofObject = [[(EODatabaseDataSource *)[eoController dataSource] databaseChannel] 
  114.                 adaptorChannel];
  115.             break;
  116.  
  117.         case EODATABASE:
  118.         case EODATABASECONTEXT:
  119.         default:
  120.             eofObject = nil;
  121.             break;
  122.         }
  123.  
  124.     return eofObject;
  125. }
  126.  
  127.  
  128. - setDelegates: sender
  129. {
  130.     int    rows, cols, iterator;
  131.     
  132.     [sender getNumRows:&rows numCols:&cols];
  133.     for (iterator = 0; iterator < rows; iterator++)
  134.         {
  135.         id cell = [sender cellAt:iterator :0];
  136.             /* Just a type cast to avoid warning of mulitple declarations */
  137.         [ (EODatabaseChannel *)[self _eofObjectForTag:[cell tag]] 
  138.             setDelegate:[cell state] ? eofDelegate : nil];
  139.         }
  140.         
  141.     return self;
  142. }
  143.         
  144.  
  145. /*--------------------------------------------------------------------------
  146.  *    Modifying EOController Characteristics
  147.  *------------------------------------------------------------------------*/
  148. - setEnableUndo: sender
  149. {
  150.     [eoController setUndoEnabled: [[sender selectedCell] state]];
  151.     return self;
  152. }
  153.  
  154.  
  155. - setAutomaticUndoMarks: sender
  156. {
  157.     [eoController setMarksEveryOperation: [[sender selectedCell] state]];
  158.     return self;
  159. }
  160.  
  161.  
  162. - setBufferEdits: sender
  163. {
  164.     [eoController setSavesToObjectsAutomatically: 
  165.         ( ! [[sender selectedCell] state])];
  166.     return self;
  167. }
  168.  
  169.  
  170. - setBufferOperations: sender
  171. {
  172.     [eoController setSavesToDataSourceAutomatically: 
  173.         ( ! [[sender selectedCell] state])];
  174.     return self;
  175. }
  176.  
  177.  
  178. - setMaximumUndoEntries: sender
  179. {
  180.     [eoController setMaximumUndoMarks: [sender intValue]];
  181.     return self;
  182. }
  183.  
  184.  
  185. /*--------------------------------------------------------------------------
  186.  *    Announcing Trace Info
  187.  *------------------------------------------------------------------------*/
  188. - (void) announce:sender selector:(SEL)selector
  189. {
  190.     return [self announce:sender selector:selector with:nil];
  191. }
  192.  
  193.  
  194. - (void) announce:sender selector:(SEL)selector with:array
  195. {
  196.     NSMutableString    *string;
  197.  
  198.     if (trace == NO) return;
  199.     
  200.     string = [NSMutableString stringWithFormat:@"BEGIN> {Sender = %s%s",
  201.         [[(NSObject *)[sender class] description] cString], verbose ? " " : "}"];
  202.     
  203.     if (verbose)
  204.         {
  205.         id verboseString = 
  206.             [NSMutableString 
  207.                 stringWithFormat:@"}\n\t{Sender Description = %s}",
  208.             [ [(NSObject *)sender description] cString]];
  209.         [string appendString:verboseString];
  210.         }
  211.         
  212.     [string appendFormat:@" \n\t{Delegate Method = %s} ", sel_getName(selector)];
  213.  
  214.     if (verbose && array)
  215.         {
  216.         id object;
  217.         id verboseString = [NSMutableString stringWithCapacity:0];
  218.         id enumerator = [array objectEnumerator];
  219.         
  220.         while ((object = [enumerator nextObject]) != nil)
  221.             [verboseString 
  222.                 appendFormat:@"\n\t{Argument = %s} \n\t{Argument Description = %s} ", 
  223.                 [[(NSObject *)[object class] description] cString], 
  224.                 [[(NSObject *) object description] cString]];
  225.  
  226.         [string appendString:verboseString];
  227.         }
  228.  
  229.         
  230.     [string appendFormat:@"\n"];
  231.     [console sprintf: "%s", [string cString]];
  232. }
  233.  
  234.  
  235. /*--------------------------------------------------------------------------
  236.  *    Application Control
  237.  *------------------------------------------------------------------------*/
  238. - appDidInit: sender
  239. {
  240.     trace = YES;
  241.     verbose = NO;
  242.     alert = YES;
  243.     
  244.     [(EOController *)eoController setDelegate:eofDelegate];
  245.     [(EODatabaseChannel *)[self _eofObjectForTag:EODATABASECHANNEL] setDelegate:eofDelegate];
  246.     [(EOAdaptorChannel *)[self _eofObjectForTag:EOADAPTORCHANNEL] setDelegate:eofDelegate];
  247.     [(EOAdaptorContext *)[self _eofObjectForTag:EOADAPTORCONTEXT] setDelegate:eofDelegate];
  248.     [(EOAdaptor *)[self _eofObjectForTag:EOADAPTOR] setDelegate:eofDelegate];
  249.     [eoController setSelectsFirstObjectAfterFetch: YES];
  250.     return self;
  251. }
  252.  
  253.  
  254. - windowWillClose:sender
  255. {
  256.     if ((sender = [console window]))
  257.         [consoleButton setState:1];
  258.         
  259.     return self;
  260. }
  261.  
  262.  
  263. - windowDidBecomeKey:sender
  264. {
  265.     if ((sender = [console window]))
  266.         [consoleButton setState:0];
  267.         
  268.     return self;
  269. }
  270.  
  271.  
  272. @end
  273.